package com.addzero.jimmer
val <T : Enum<T>> T.bitValue: Int get() = 1 shl this.ordinal


// 枚举集合 → 二进制
fun <T : Enum<T>> Collection<T>.toBitmask(): Int {
    return fold(0) { mask, enum -> mask or enum.bitValue }
}


object EnumBitmaskUtils {
    // 二进制 → 枚举集合
    inline fun <reified T : Enum<T>> Int.toEnumList(): List<T> {
        return enumValues<T>()
            .filter { (this and it.bitValue) != 0 }
    }

}

